package com.sweet.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * HTML工具
 *
 * @author limi
 * @date 2023/5/6 16:46
 */
public class HtmlUtil {
    /**
     * 转为Unity富文本内容
     *
     * @param html
     * @return
     */
    public static String toUnityRichText(String html) {
        Document doc = Jsoup.parse(html);
        StringBuilder sb = new StringBuilder();

        // 处理文本节点
        for (Element p : doc.select("p")) {
            sb.append("<size=24>");
            sb.append(p.text());
            sb.append("</size>\n");
        }

        // 处理超链接
        for (Element a : doc.select("a")) {
            String href = a.attr("href");
            String text = a.text();
            sb.append("<link=");
            sb.append(href);
            sb.append(">");
            sb.append(text);
            sb.append("</link>\n");
        }

        // 处理图片
        for (Element img : doc.select("img")) {
            String src = img.attr("src");
            String alt = img.attr("alt");
            sb.append("<sprite name=");
            sb.append(alt);
            sb.append(">\n");
        }

        // 处理其他标记
        Elements spans = doc.select("span, b, i, u, s, color, size, br");
        for (Element span : spans) {
            if (span.tagName().equals("span")) {
                sb.append("<color=");
                sb.append(span.attr("style").replaceAll(".*color:(#[0-9a-fA-F]{6});.*", "$1"));
                sb.append(">");
                sb.append(span.text());
                sb.append("</color>");
            } else if (span.tagName().equals("b")) {
                sb.append("<b>");
                sb.append(span.text());
                sb.append("</b>");
            } else if (span.tagName().equals("i")) {
                sb.append("<i>");
                sb.append(span.text());
                sb.append("</i>");
            } else if (span.tagName().equals("u")) {
                sb.append("<u>");
                sb.append(span.text());
                sb.append("</u>");
            } else if (span.tagName().equals("s")) {
                sb.append("<s>");
                sb.append(span.text());
                sb.append("</s>");
            } else if (span.tagName().equals("color")) {
                sb.append("<color=");
                sb.append(span.attr("value"));
                sb.append(">");
                sb.append(span.text());
                sb.append("</color>");
            } else if (span.tagName().equals("size")) {
                sb.append("<size=");
                sb.append(span.attr("value"));
                sb.append(">");
                sb.append(span.text());
                sb.append("</size>");
            } else if (span.tagName().equals("br")) {
                sb.append("\n");
            }
        }

        return sb.toString();
    }

    private static String parseStyle(Element element) {
        StringBuilder sb = new StringBuilder();
        String style = element.attr("style");
        if (style.isEmpty()) {
            sb.append(element.text());
        } else {
            String[] styles = style.split(";");
            for (String s : styles) {
                String[] pair = s.split(":");
                String key = pair[0].trim();
                String value = pair[1].trim();
                switch (key) {
                    case "color":
                        sb.append("<color=");
                        sb.append(value);
                        sb.append(">");
                        sb.append(element.text());
                        sb.append("</color>");
                        break;
                    case "font-size":
                        sb.append("<size=");
                        sb.append(value);
                        sb.append(">");
                        sb.append(element.text());
                        sb.append("</size>");
                        break;
                    // 处理其他样式
                    // ...
                    default:
                        sb.append(element.text());
                        break;
                }
            }
        }
        return sb.toString();
    }
}
